/**
 * 去除回车符
 * @param  {[string]} str [原字符串]
 * @return {[string]}     [去除两边空格 去除回车 去除''>'和'<'之间的空格]
 */
exports.replaceXMLBlank = function(str) {
  str = str.replace(/(^\s*)|(\s*$)/g, ""); //去除字符两边的空格
  str = str.replace(/[\r\n\t]/g, ""); //去掉回车换行
  return str.replace(/>[\s]+</g, "><"); //>  <  => '><'
};

/**
 * 判断参数为空
 * @param  {[string]} string [传入参数]
 * @return {Boolean}         [值为空:true,值不为空:false]
 */
exports.isBlank = function(string) {
  if (typeof string !== 'string') {
    throw new Error('传入的参数不属于字符串！');
  } else if (string.length === 0) {
    return true;
  } else if (string.match(/^[\s\f\n\t\r]+$/)) {
    return true;
  }
  return false;
};

/**
 * 根据XML标签值获取XML节点值
 * 例子：
 * var str = '<A><B>hello</B></A>';
 * var value = getValueByTag('B',str);  => hello
 * @param  {[string]} nodeTag [标签名]
 * @param  {[string]} src     [源xml字符串]
 * @return {[string]}         [标签节点值]
 */
exports.getValueByTag = function(nodeTag, src) {
  var obj = process(nodeTag, src);
  if (obj) {
    return src.substring(obj.start, obj.end);
  }
  return '';
};

/**
 * 根据替换值替换相应标签并返回替换好的XML字符串
 * @param  {[string]} nodeTag    [标签名]
 * @param  {[string]} replaceStr [替换字符串]
 * @param  {[string]} src        [原XML字符串]
 * @return {[string]}            [替换好的XML字符串]
 */
exports.replaceValueByTag = function(nodeTag, replaceStr, src) {
  var obj = process(nodeTag, src, replaceStr);
  if (obj) {
    return obj;
  }
  return src;
};

/**
 * 根据参数不同进行不同的操作处理
 * 1、两个参数，获取node值
 * 2、三个参数，替换tag中的node值
 * @return {[boolean]} [false，无法处理]
 * @return {[object]} [包含开始指数和结束指数的对象]
 * @return {[string]} [替换好的字符串]
 */
function process() {
  var nodeTag = arguments[0] ? arguments[0] : '';
  var src = arguments[1] ? arguments[1] : '';
  var replaceStr = arguments[2] ? arguments[2] : '';
  var nodeStart = '<' + nodeTag + '>';
  var nodeEnd = '</' + nodeTag + '>';
  var nodeStartLength = nodeStart.length;
  var startIndex = src.indexOf(nodeStart);
  var endIndex = src.indexOf(nodeEnd);
  if (startIndex > -1 && endIndex > -1) {
    if (replaceStr !== '') {
      var segStart = src.substring(0, startIndex + nodeStartLength);
      var segEnd = src.substring(endIndex, src.length);
      return segStart + replaceStr + segEnd;
    }
    return { start: startIndex + nodeStartLength, end: endIndex };
  }
  return false;
}
